import {PromiseMabe, VJson} from "../types";
import {applyValue, deepTraverObject} from "..";
import _ from 'lodash'

/**
 * 将所有 on 开头的属性，都转换为 scope 的成员方法
 * {
 *     view: 'text'
 *     onChange: 'aaa'
 * }
 *
 * function aaa(){
 * }
 */
export function eventTransform(this: any, vjson: VJson): Promise<VJson> {
    const me = this
    return new Promise((resolve, reject) => {
        deepTraverObject(vjson, (path, key, value) => {
            if (!key) {
                // key 没有值的，代表对象本身非 vjson 定义
                return
            }

            // on 开头的方法名，都是事件，如果事件是字符串类型，则转换为方法
            if (typeof value === 'string' && value && key.startsWith('on') && _.size(key) > 2) {
                const func = me[value]
                if (typeof func !== 'function') {
                    reject('无法找到名称为' + value + '的方法')
                }
                _.set(vjson, path, func)
            }
        })

        resolve(vjson)
    })
}
